package com.lijing.BinaryTree;

/**
 * @title: ArrBinaryTreeDemo
 * @Author LiJing
 * @Date: 2021/2/182:50 下午
 * @Version 1.0
 */
public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.postOrder();
    }

}

class ArrBinaryTree{
    private int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public void preOrder(){
        this.preOrder(0);
    }
    public void infixOrder(){
        this.infixOrder(0);
    }
    public void postOrder(){
        this.postOrder(0);
    }
    /**
     * 前序遍历
     * @param index 数组下标
     */
    public void preOrder(int index){
        if (arr == null || arr.length == 0){
            System.out.println("数组为空，不能前序遍历！");
        }
        /*
         * @Date: 2021/2/18 2:57 下午
         * Step 1: 打印当前
         */
        System.out.println(arr[index]);
        /*
         * @Date: 2021/2/18 2:57 下午
         * Step 2: 向左递归遍历
         */
        if ((index*2+1) < arr.length){
            preOrder(2*index+1);
        }
        /*
         * @Date: 2021/2/18 2:57 下午
         * Step 3: 向右递归遍历
         */
        if ((index*2+2) < arr.length){
            preOrder(2*index+2);
        }
    }

    /**
     * 中序遍历
     * @param index 数组下标
     */
    public void infixOrder(int index){
        if (arr == null || arr.length == 0){
            System.out.println("数组为空，不能中序遍历！");
        }
        if ((index*2+1) < arr.length){
            infixOrder(2*index+1);
        }
        System.out.println(arr[index]);
        if ((index*2+2) < arr.length){
            infixOrder(2*index+2);
        }
    }
    /**
     * 后序遍历
     * @param index 数组下标
     */
    public void postOrder(int index){
        if (arr == null || arr.length == 0){
            System.out.println("数组为空，不能后序遍历！");
        }
        if ((index*2+1) < arr.length){
            postOrder(2*index+1);
        }
        if ((index*2+2) < arr.length){
            postOrder(2*index+2);
        }
        System.out.println(arr[index]);
    }
}
